<?php
/**
 * 格式化组件
 *
 */
namespace common\components;

use linslin\yii2\curl\Curl;
use yii;
use yii\base\Component;
use yii\helpers\Json;

class Formatter extends yii\i18n\Formatter
{
    /**
     * 格式化价格
     *
     * @param $price            价格
     * @param int $formatType   格式化类型
     * @param int $decimals     保留小数位数
     * @return bool|float|int|string
     *
     * ```php
     * Yii::$app->formatter->priceFormat('1000.626',2);
     * ```
     */
    public function priceFormat($price, $formatType = 0, $decimals = 2, $isRepate = true)
    {
        switch ($formatType) {
            case 0: // 不四舍五入，直接进位 eg. 1000.621/1000.626 返回1000.63; 1000.620 返回1000.62
                $dsPos = strpos($price,'.');
                if($dsPos) {
                    $decimalsTmp = $decimals + 1;
                    $priceTmp = substr(sprintf("%.{$decimalsTmp}f",$price),0,-1);
                    $subStr = substr($price,$decimals + $dsPos + 1);
                    if($subStr > 0) {
                        $price = floatval($priceTmp + (1 / pow(10,$decimals)));
                    } else {
                        $price = number_format($price,2,'.','');
                    }
                }


                break;
            case 1: // 四舍五入 返回 eg. 1,000.63
                $price = $this->asDecimal(floatval($price),$decimals);

                break;
            case 2: // 四舍五入 返回 eg. 1000.63
                $this->decimalSeparator = '.';
                $this->thousandSeparator = '';
                $price = $this->asDecimal(floatval($price),$decimals);

                break;
            case 3: // 不四舍五入 返回 eg.
                $decimalsTmp = $decimals + 1;
                $price = substr(sprintf("%.{$decimalsTmp}f",$price),0,-1);

                break;
            case 4: // 直接取整 返回 eg. 1000
                $price = intval($price);

                break;
            case 5: // 先四舍五入后取整，返回 eg.10001
                $price = round($price);

                break;
        }

        // 后置补0
        if ($isRepate == TRUE) {
            return sprintf('%.' . $decimals . 'f', strval($price));
        } else {
            return strval($price);
        }
    }
    /**
     * 返回人民币格式
     */
    public function currencyFormat($price,$type=1,$formatType=0){
        if($type==1){
            return "¥".$this->priceFormat($price,$formatType);
        }
    }

}